EKS x Terraformな人はEKS Blueprintsをチェックしてみて
EKSをTerraformでプロビジョニングされている方は、一度 terraform-aws-eks-blueprints リポジトリを覗いてみることをおすすめします!今回言いたいのはこれだけです。
EKS Blueprintsとは
一言で言えばEKSの実装例集です。 aws-ia(AWS Integration and Automation)というAWSのGitHubアカウントがホストしているリポジトリです。
EKS自体のIaC、またそのEKSクラスターの上に様々なツールをインストールするIaCはなかなかに複雑で、KubernetesやAWS、さらにはそのツールについての理解が必要です。私はいつもどのレイヤ(Kubernetes,AWS,各種ツール…)の知識が足りて無いのかわからなくなって混乱しています…しんどいです笑
そこでBlueprintsです。このリポジトリには色々な要件のEKSのIaC例があります。
実装例
- VPCも併せてつくる基本的な構成
- EC2ノードなしFargateノードだけの構成
- プライベートクラスター
- ArgoCDでGitOps
- Karpenter
- AWS Distro for OpenTelemetry (ADOT)
なので、やりたいことがこのリポジトリにあれば、そのコードを読んで具体的な実装方法を学ぶことができます!
実際私はFargateノードだけの構成を作る際に参考にしました。公式ドキュメントにも記載がありますが、CoreDNSはデフォルトではEC2ノードで稼働するように設定されており、Fargateノードだけにするとエラーになります。そのワークアラウンドが実装されていて非常に助かりました。またREADME.mdにその部分の丁寧な解説があったのも良かったです。
モジュールとしても使える
モジュールもたくさん提供されているので、これらを直接呼び出せば細かな実装を書く手間から開放されます。モジュールからさらに別モジュールを呼んだりしていてちょっと理解が大変なものもありますが…
私はAWS Load Balancer Controllerのモジュールを利用しました。Version指定はクエリストリングで行ないます。(参考:Module Sources | Terraform by HashiCorp)
module "aws_load_balancer_controller" { source = "github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons/aws-load-balancer-controller?ref=v4.8.1" helm_config = { set_values = [ { name = "vpcId" value = module.vpc.vpc_id }, { name = "podDisruptionBudget.maxUnavailable" value = 1 }, ] } addon_context = merge( local.eks_blueprints_addon_context_default, { irsa_iam_role_path = "/" irsa_iam_permissions_boundary = "" default_repository = "602401143452.dkr.ecr.ap-northeast-1.amazonaws.com" } ) }
CDK版もある
私はまだ使ったことが無いですがCDK版もあるようです。